package lkx.demo.test3;

/**
 * 2. 数组元素的查找
 * 顺序查找：
 *     > 优点：算法简单；
 *     > 缺点：执行效率低。执行的时间复杂度O(N)
 *
 * 二分法查找：
 *     > 优点：执行效率高。执行的时间复杂度O(logN)
 *     > 缺点：算法相较于顺序查找难一点；前提：数组必须有序
 *     二分查找的原理：
 *      由于数组里的元素是按顺序排序的，因此利用这一特点，每次选取去中间元素的值与目标值比较
 *      根据比较的大小，从而缩小范围，再次去缩小后范围的中间值，与目标值比较，以此类推
 *
 *
 *
 *
 * @author kunxianli
 * @date 2024/01/31 17:54
 **/
public class TestArraySearch2 {

    public static void main(String[] args) {
        int[] arr2 = new int[]{2,4,5,8,12,15,19,26,37,49,51,66,89,100};

        int target = 5;
//        target = 17;

        int head = 0;//默认的首索引
        int end = arr2.length-1;//默认的尾索引
        boolean isFlag = false;//判断是否找到了指定元素
        while (head <= end){

            int middle = (head + end) / 2;

            if(target == arr2[middle]){
                System.out.println("找到了" + target + ",对应的位置为：" + middle);
                isFlag = true;
                break;
            }else if(target > arr2[middle]){
                head = middle + 1;
            }else{//target < arr2[middle]
                end = middle - 1;
            }

        }

        if(!isFlag){
            System.out.println("不好意思，未找到");
        }

    }

}
